package persistencia;

import com.mysql.jdbc.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import modelo.Intervenciones;

public class GestionIntervenciones {

    final int IPA = 0;

    private static BaseDatos bbdd = new BaseDatos("jdbc:mysql://localhost/sge_dam2b", "com.mysql.jdbc.Driver");
    private static Statement s;
    private static Connection c;
    private static ResultSet rs;
    private String sql;

    public void insertarIntervencion(String fecha, int numQuirofano, int idPA, int idPB, String especialidad) {

        try {
            bbdd.abrir();
            s = bbdd.getConexion().createStatement();

            Date fechaIntervencion = null;
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
            try {
                fechaIntervencion = formatter.parse(fecha);
            } catch (ParseException ex) {
                Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            Intervenciones i = new Intervenciones(0, fechaIntervencion, numQuirofano, especialidad, idPA, idPB);

            sql = "insert into intervenciones(fechaIntervencion,numQuirofano,especialidad,idPA,codPaciente) values ('" + i.getFechaIntervencion() + "', " + i.getNumQuirofano() + ", '" + i.getEspecialidad() + "', " + i.getIdPA() + ", " + i.getIdPB() + ")";

            s.executeUpdate(sql);

            JOptionPane.showMessageDialog(null, "Intervención creada correctamente.", "Mensaje", JOptionPane.INFORMATION_MESSAGE);

            bbdd.cerrar();

        } catch (NullPointerException ex) {
            System.err.println("Error de BBDD " + ex.getMessage());
            try {
                bbdd.cerrar();
            } catch (SQLException ex1) {
                Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex1);
            }
        } catch (SQLException ex) {
            System.err.println("Error de BBDD " + ex.getMessage());
            JOptionPane.showMessageDialog(null, "Error al crear intervención.", "Mensaje", JOptionPane.ERROR_MESSAGE);
            try {
                bbdd.cerrar();
            } catch (SQLException ex1) {
                Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex1);
            }
        }
    }

    public ArrayList<Integer> obteneridPB() {
        ArrayList<Integer> listaidPB = null;
        try {
            bbdd.abrir();
            s = bbdd.getConexion().createStatement();
            rs = s.executeQuery("select * from pruebasbasicas");
            while (rs.next()) {
                listaidPB.add(rs.getInt("idPB"));
            }
            bbdd.cerrar();
        } catch (SQLException ex) {
            try {
                bbdd.cerrar();
            } catch (SQLException ex1) {
                Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex1);
            }
            Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex);
        }
        return listaidPB;
    }

    public ArrayList<Integer> obtenerIntervenciones() {
        ArrayList<Integer> listaIntervenciones = null;

        try {
            bbdd.abrir();
            s = bbdd.getConexion().createStatement();
            rs = s.executeQuery("select * from intervenciones");
            while (rs.next()) {
                listaIntervenciones.add(rs.getInt("idIntervencion"));
            }
            bbdd.cerrar();
        } catch (SQLException ex) {
            try {
                bbdd.cerrar();
            } catch (SQLException ex1) {
                Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex1);
            }
            Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex);
        }

        return listaIntervenciones;
    }

    public void borrarIntervencion(int intervencion) {
        try {
            bbdd.abrir();
            rs = s.executeQuery("select idIntervencion from intervenciones where idIntervencion=" + intervencion);

            if (rs.next()) {
                s = c.createStatement();
                s.executeUpdate("delete from intervenciones where idIntervencion=" + intervencion);
                JOptionPane.showMessageDialog(null, "Intervención borrada correctamente.", "Mensaje", JOptionPane.INFORMATION_MESSAGE);

            } else {
                JOptionPane.showMessageDialog(null, "Error al borrar intervención.", "Mensaje", JOptionPane.ERROR_MESSAGE);
            }
            bbdd.cerrar();
        } catch (SQLException ex) {
            try {
                bbdd.cerrar();
            } catch (SQLException ex1) {
                Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex1);
            }
            Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void modificarIntervencion(String fecha, int numQuirofano, int idPA, int intervencionModificada, String especialidad) {

        try {

            bbdd.abrir();
            s = bbdd.getConexion().createStatement();

            Date fechaIntervencion = null;
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
            try {
                fechaIntervencion = formatter.parse(fecha);
            } catch (ParseException ex) {
                bbdd.cerrar();
                Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex);
            }

            s.executeUpdate("update intervenciones set fechaIntervencion="
                    + fechaIntervencion + ", numQuirofano=" + numQuirofano + ", especialidad='" + especialidad + "', idPA=" + idPA + " where idIntervencion=" + 
                    intervencionModificada);
            
            JOptionPane.showMessageDialog(null, "Intervención modificada correctamente.", "Mensaje", JOptionPane.INFORMATION_MESSAGE);

            s.executeUpdate(sql);

            bbdd.cerrar();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error al modificar intervención.", "Mensaje", JOptionPane.ERROR_MESSAGE);
            try {
                bbdd.cerrar();
            } catch (SQLException ex1) {
                Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex1);
            }
            Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public ArrayList<Intervenciones> tablaConsultarIntervenciones () {
        ArrayList<Intervenciones> listaIntervenciones = null;
        
        try {
            bbdd.abrir();
            s = bbdd.getConexion().createStatement();
            rs = s.executeQuery("select * from intervenciones");
            while (rs.next()) {
                listaIntervenciones.add(new Intervenciones(rs.getInt("idIntervencion"), rs.getDate("fechaIntervencion"), rs.getInt("numQuirofano"), rs.getInt("idPA"), rs.getInt("idPB")));
            }
            bbdd.cerrar();
        } catch (SQLException ex) {
            try {
                bbdd.cerrar();
            } catch (SQLException ex1) {
                Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex1);
            }
            Logger.getLogger(GestionIntervenciones.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return listaIntervenciones;
    }
}
